package com.neuedu.corejava.ch8;

public class TryCalss {
	public static void main(String[] args) {
		int a = 1, b = 0;
		try {
			// 1.异常处理方法 try catch
			int c = a / b;
		} catch (Exception e) {
			// 向上抛出异常
			// throw e;
		}

		// 2.try finally
		/*
		 * try { int c=a/b; } finally { System.out.println("一定会执行的代码");
		 * 
		 * }
		 */

		// 3.try catch finally
		try {
			int c = a / b;// 可能发生异常的代码
		} catch (Exception e) {
			// 发生异常后需要执行的代码
		} finally {
			// 不管是否发生异常，一定要执行的代码
			System.out.println("一定会执行的代码");
		}

		// 4.try catch catch finally
		try {
			int c = a / b;
			int[] array = new int[3];
			array[3] = 5;

		} catch (ArrayIndexOutOfBoundsException e) {
			e.printStackTrace();
			System.out.println("数组下标越界异常！");

		} catch (ArithmeticException e) {// 使用多个catch块时，需要注意：异常类的父子关系，父类异常需要写在后面
			System.out.println("发生了算术运算异常！");

		} finally {
			System.out.println("一定会执行的代码");
		}

		// 5.try catch finally --JDK.7以后支持
		try {
			int c = a / b;
			int[] array = new int[3];
			array[3] = 5;

		} catch (ArrayIndexOutOfBoundsException | ArithmeticException e) {// 使用一个catch捕获多个异常，异常不能有父子关系
			e.printStackTrace();
			System.out.println("数组下标越界 或 算术运算 异常！");
			System.exit(0);//直接退出程序，不执行下面finally代码

		} finally {
			//如果try 或catch中，执行了System.exit(0);则不执行finally
			System.out.println("一定会执行的代码");
		}
		// 6.try catch 支持嵌套
		try {
			try {
				try {

				} catch (Exception e) {

				}

			} catch (Exception e) {

			}

		} catch (Exception e) {

		}
		
		//
		try {
			System.out.println("执行try");
			return;
		} catch (Exception e) {
			System.out.println("执行catch");
			return;
		}finally {
			//在try 或catch 中 ，如果执行return 语句finally块还是会执行
			System.out.println("执行finally");
		}
		//System.out.println("main方法执行完毕");
	}

}
